﻿/*
  --============================================================================================
  --============================================================================================
  -- Fichier          :	MEntetePV.cs
  -- Objet			  :	Object métier adapté de la BDD PV_ENTETE
  -- Auteur			  :	S. Le Gouellec
  -- Date de création : 07/2014
  --                              :
  --                              :
  -- Notes spéciales		  :
  -- Historique			  :
  ----------------------------------------------------------------------------------------------
  -- |     Code    |  Vers. |   Date   | Auteur	|                  Description
  -- |  Dem/inc/pr |  	    |          |        |         
  -- -------------------------------------------------------------------------------------------
  -- |             |   1.0  | 07/2014  |  SLE	| Création
  -- |	           |	    |	       |        |
  --============================================================================================
  --============================================================================================
*/

using Models;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ModelEntities.Adapter
{
    /// <summary>
    /// Classe métier représentant un entete de PV.
    /// Classe permettant d'encapsuler une instance de PV_ENTETE qui est mappé directement avec la BDD
    /// </summary>
    public class MEntetePV : ModelPV, INotifyPropertyChanged
    {
        #region Attribut(s)

        /// <summary>
        /// Contenu du métier : En relation avec l'objet mappé en BDD
        /// </summary>
        private PV_ENTETE contenu;

        /// <summary>
        /// Liste des détails du PV, mappé à la BDD grâce à la foregin key de la BDD
        /// </summary>
        private List<MDetailsPV> detailsPV;

        #endregion

        #region Propriété(s)

        /// <summary>
        /// Numéro de PV
        /// </summary>
        public String NoPV 
        {
            get { return contenu.NO_PV; }
            set 
            {
                contenu.NO_PV = value;
                OnPropertyChanged("NoPV");
            } 
        }

        /// <summary>
        /// Date d'édition du PV
        /// </summary>
        public DateTime DateEdition
        {
            get { return contenu.DATE_EDITION; }
            set
            {
                contenu.DATE_EDITION = value;
                OnPropertyChanged("DateEdition");
            }
        }

        /// <summary>
        /// Numéro de version du PV
        /// </summary>
        public String Version
        {
            get { return contenu.VERSION; }
            set
            {
                contenu.VERSION = value;
                OnPropertyChanged("Version");
            }
        }

        /// <summary>
        /// Nombre de page du PV
        /// </summary>
        public short? NombrePage
        {
            get { return contenu.NOMBRE_PAGE; }
            set
            {
                contenu.NOMBRE_PAGE = value;
                OnPropertyChanged("NombrePage");
            }
        }

        /// <summary>
        /// Responsable du PV
        /// </summary>
        public String Responsable
        {
            get { return contenu.RESPONSABLE; }
            set
            {
                contenu.RESPONSABLE = value;
                OnPropertyChanged("Responsable");
            }
        }

        /// <summary>
        /// Liste des détails du PV, mappé à la BDD grâce à la foregin key de la BDD
        /// </summary>
        public List<MDetailsPV> DetailsPV
        {
            get
            {
                return detailsPV;
            }
            private set
            {
                detailsPV = value;
            }
        }

        #endregion

        #region Constructeur(s)

        /// <summary>
        /// Constructeur vide
        /// </summary>
        public MEntetePV() 
        {
            DetailsPV = new List<MDetailsPV>();
            setContenu(null);
        }

        /// <summary>
        /// Constructeur avec le contenu pour permettre l'encapsulation
        /// </summary>
        /// <param name="pv">PV du métier</param>
        public MEntetePV(PV_ENTETE pv)
        {
            DetailsPV = new List<MDetailsPV>();
            setContenu(pv);
        }

        #endregion

        #region Méthode(s)

        /// <summary>
        /// Permet de setter le contenu de cet objet métier de l'application
        /// </summary>
        /// <param name="contenu">Contenu, doit être un PV_ENTETE pour que l'objet arrive à encapsuler, sinon ne fait rien</param>
        public void setContenu(object contenu)
        {
            PV_ENTETE pv = contenu as PV_ENTETE;

            if (pv != null)
            {
                this.contenu = pv;

                // Affection des détails du PV
                foreach (PV_DETAIL pvDetail in this.contenu.PV_DETAIL)
                    detailsPV.Add(new MDetailsPV(pvDetail));
            }
            else
                this.contenu = new PV_ENTETE();
        }

        #endregion

        #region Implements INotifyPropertyChanged

        /** Permet de notifier les élements grapghiques qui sont bindés dessus, en cas de modification **/
        public event PropertyChangedEventHandler PropertyChanged;
        private void OnPropertyChanged(String info)
        {
            PropertyChangedEventHandler handler = PropertyChanged;
            if (handler != null)
            {
                handler(this, new PropertyChangedEventArgs(info));
            }
        }

        #endregion

    }
}
